package com.guducat.collegeWeb.controller;

import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 管理员Section控制器
 * 提供获取当前用户可用的section选项功能
 */
@RestController
@RequestMapping("/api/admin/sections")
@Tag(name = "管理员Section功能", description = "提供获取当前用户可用的section选项功能，需要登录")
public class AdminSectionController {

    /**
     * 获取当前用户可用的section选项
     * 根据用户权限返回对应的section选项列表
     * @return section选项列表
     */
    @Operation(
        summary = "获取当前用户可用的section选项",
        description = "根据当前登录用户的权限返回对应的section选项列表，需要先登录",
        security = { @SecurityRequirement(name = "satoken") }
    )
    @ApiResponses({
        @ApiResponse(responseCode = "200", description = "成功获取section选项列表"),
        @ApiResponse(responseCode = "401", description = "未登录")
    })
    @GetMapping("/options")
    @SaCheckLogin
    public SaResult getSectionOptions() {
        // 获取当前用户权限列表
        List<String> permissions = StpUtil.getPermissionList();
        
        // 根据权限生成section选项
        List<Map<String, String>> sectionOptions = new ArrayList<>();
        
        // 如果是管理员，返回所有选项
        if (permissions.contains("Admin")) {
            sectionOptions.add(createSectionOption("人工智能学院", "人工智能学院"));
            sectionOptions.add(createSectionOption("建筑与艺术学院", "建筑与艺术学院"));
            sectionOptions.add(createSectionOption("数字商学院", "数字商学院"));
            sectionOptions.add(createSectionOption("人文与教育学院", "人文与教育学院"));
            sectionOptions.add(createSectionOption("卫生健康学院", "卫生健康学院"));
            sectionOptions.add(createSectionOption("智能工程学院", "智能工程学院"));
            sectionOptions.add(createSectionOption("教务处", "教务处"));
        } else {
            // 根据具体权限添加对应选项
            if (permissions.contains("人工智能学院编辑")) {
                sectionOptions.add(createSectionOption("人工智能学院", "人工智能学院"));
            }
            if (permissions.contains("建筑与艺术学院编辑")) {
                sectionOptions.add(createSectionOption("建筑与艺术学院", "建筑与艺术学院"));
            }
            if (permissions.contains("数字商学院编辑")) {
                sectionOptions.add(createSectionOption("数字商学院", "数字商学院"));
            }
            if (permissions.contains("人文与教育学院编辑")) {
                sectionOptions.add(createSectionOption("人文与教育学院", "人文与教育学院"));
            }
            if (permissions.contains("卫生健康学院编辑")) {
                sectionOptions.add(createSectionOption("卫生健康学院", "卫生健康学院"));
            }
            if (permissions.contains("智能工程学院编辑")) {
                sectionOptions.add(createSectionOption("智能工程学院", "智能工程学院"));
            }
            if (permissions.contains("教务处编辑")) {
                sectionOptions.add(createSectionOption("教务处", "教务处"));
            }
        }
        
        return SaResult.data(sectionOptions);
    }
    
    /**
     * 创建section选项
     * @param value 选项值
     * @param label 选项标签
     * @return section选项
     */
    private Map<String, String> createSectionOption(String value, String label) {
        Map<String, String> option = new HashMap<>();
        option.put("value", value);
        option.put("label", label);
        return option;
    }
}
